#ifndef __MYSTRING_H_
#define __MYSTRING_H_

#include <iostream>
#include <cstdbool>
#include <cstring>
class MyStringArray; //前置声明
class MyString
{
public:
    MyString();
    MyString(const char *str);
    MyString(const MyString& string);
    MyString& operator=(const MyString &string);
    ~MyString();

    MyString& operator+=(const MyString& string);
    MyString operator+(const MyString& string);
    MyString& operator+=(const char& c);
    MyString& operator-=(const MyString& string);
    MyString operator-(const MyString& string);

    bool operator==(const MyString& string);
    bool operator!=(const MyString& string);
    bool operator&&(const MyString& string);

    //类型转换运算符重载
    operator int();
    operator double();

    //字符串切割
    MyStringArray split(const MyString& delim);

    char& operator[](int index);

    friend std::ostream& operator<<(std::ostream& os,const MyString& s);
    
private:
    void ReSize(int capacity);
    char *s;
    int size;
    int capacity;
};

std::ostream& operator<<(std::ostream& os,const MyString& s);
std::istream& operator>>(std::istream& is,MyString &string);


class MyStringArray
{
public:
    MyStringArray();
    MyStringArray(const MyStringArray &a);
    MyStringArray& operator=(const MyStringArray &a);
    
    ~MyStringArray();

    //+ -= - == [] >>
    MyStringArray& operator+=(const MyString& str);
    MyStringArray operator+(const MyString& a);
    MyStringArray& operator-=(const MyString& str);
    MyStringArray operator-(const MyString& str);
    bool operator==(const MyStringArray& a);
    bool operator!=(const MyStringArray& a);
    void ReSize(int capacity);

    MyStringArray split(const MyString& delim);

    MyString& operator[](int index);

    friend std::ostream& operator<<(std::ostream& os, const MyStringArray &a);
    friend std::istream& operator>>(std::istream& is, MyStringArray &a);

private:
    MyString *array;
    int size;
    int capacity;
};

std::ostream& operator<<(std::ostream& os, const MyStringArray &a);
std::istream& operator>>(std::istream& is, MyStringArray &a);

#endif